<!DOCTYPE html>
<html lang="en">
  <head>
    <meta charset="UTF-8" />
    <meta http-equiv="X-UA-Compatible" content="IE=edge" />
    <meta name="viewport" content="width=device-width, initial-scale=1.0" />
    <title>Document</title>
  </head>
  <body>
    <script>
      // promise.all promise 自带的一个函数

      // 传入一个数组，数组里面每一项的都是 promise

      // Promise.all([promise1, promise2, promise3, ...]).then(([res1, res2, res3, ...])=>{/*...*/})

      // Promise all 中，所有 promise 都返回（resolve）的时候，返回全部结果到 .then 参数

      // 返回等待 n 毫秒的 promise
      function wait(n) {
        return new Promise((res) => {
          setTimeout(() => {
            res(`等待了${n}毫秒`);
          }, n);
        });
      }

      const result = [];
      wait(1000).then((res) => {
        console.log(res);
        result[0] = res;
      });
      wait(2000).then((res) => {
        console.log(res);
        result[1] = res;
      });
      wait(3000).then((res) => {
        console.log(res);
        result[2] = res;
        // 在最后一个返回时，打印全部
        console.log(result);
      });

      // 最后一个返回时，返回一连串 promise 的 resolve
      Promise.all([wait(1000), wait(2000), wait(3000)]).then((res) => {
        console.log("Promise.all", res);
      });

      // Promise.race
      // 传入一个 promise 的数组 和 all 参数一样
      // 哪个 promise 先返回，就返回哪个的 resolve
      // 做男人一定要快！
      Promise.race([wait(1000), wait(500), wait(3000)]).then((res) => {
        console.log("Promise.race", res);
      });
    </script>
  </body>
</html>
